from fastapi import APIRouter, HTTPException

from web.schemas import PredictRequest, PredictResponse
from web.service import predict_service,predict_text # 确保这个函数存在

# 创建路由
predict_router = APIRouter(tags=["预测接口"])


def predict_title(text):
    """
    预测文本的标题

    Args:
        text: 输入的文本内容

    Returns:
        预测的标题

    Raises:
        TypeError: 当输入不是字符串类型时
        ValueError: 当输入为空或无效时
    """
    # 参数验证
    if text is None:
        raise ValueError("输入文本不能为None")

    if not isinstance(text, str):
        raise TypeError("输入文本必须是字符串类型")

    if len(text.strip()) == 0:
        raise ValueError("输入文本不能为空")

    # TODO: 实现标题预测逻辑
    pass


@predict_router.post("/predict", response_model=PredictResponse)
def predict(request: PredictRequest) -> PredictResponse:
    """
    预测接口：接收文本，返回预测的 ID 和标签
    """
    try:
        text = request.text
        if not text:
            raise HTTPException(status_code=400, detail="输入文本不能为空")

        # 去除首尾空格
        text = text.strip()
        if not text:
            raise HTTPException(status_code=400, detail="输入文本不能为空")

        # 调用实际的服务函数（注意：你导入的是 predict_title，不是 predict_service）
        pred_id, pred_label = predict_title(text)

        return PredictResponse(pred_id=pred_id, pred_label=pred_label, text=text)

    except HTTPException:
        # 如果是主动抛出的 HTTPException，直接传播
        raise
    except Exception as e:
        # 捕获其他未预期的异常
        raise HTTPException(status_code=500, detail=f"预测失败: {str(e)}")